using System;
using EnvDTE;

namespace NUnitGenAddIn.Core.Test
{
    /// <summary>
    /// Mock Code Class
    /// </summary>
	public class MockCodeClass : MockCodeElement, CodeClass
	{
        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeClass"/> class.
        /// </summary>
        /// <param name="_name">The _name.</param>
		public MockCodeClass(string _name) : base(_name)
		{}

        /// <summary>
        /// Initializes a new instance of the <see cref="MockCodeClass"/> class.
        /// </summary>
        /// <param name="_name">The _name.</param>
        /// <param name="children">The children.</param>
		public MockCodeClass(string _name, CodeElements children) : base(_name, children)
		{}

		#region CodeClass Members

        /// <summary>
        /// Gets or sets the access.
        /// </summary>
        /// <value>The access.</value>
		public vsCMAccess Access
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Adds the attribute.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Value">The value.</param>
        /// <param name="Position">The position.</param>
        /// <returns></returns>
		public CodeAttribute AddAttribute(string name, string Value, object Position)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the base.
        /// </summary>
        /// <param name="Base">The base.</param>
        /// <param name="Position">The position.</param>
        /// <returns></returns>
		public CodeElement AddBase(object Base, object Position)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the class.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="implementedInterfaces">The implemented interfaces.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
		public CodeClass AddClass(string name, object Position, object bases, object implementedInterfaces, 
                                  vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the delegate.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Type">The type.</param>
        /// <param name="Position">The position.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
		public CodeDelegate AddDelegate(string name, object Type, object Position, vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the enum.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
		public CodeEnum AddEnum(string name, object Position, object bases, vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the function.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="kind">The kind.</param>
        /// <param name="Type">The type.</param>
        /// <param name="Position">The position.</param>
        /// <param name="access">The access.</param>
        /// <param name="Location">The location.</param>
        /// <returns></returns>
		public CodeFunction AddFunction(string name, vsCMFunction kind, object Type, object Position, 
                                        vsCMAccess access, object Location)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the implemented interface.
        /// </summary>
        /// <param name="Base">The base.</param>
        /// <param name="Position">The position.</param>
        /// <returns></returns>
		public CodeInterface AddImplementedInterface(object Base, object Position)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the property.
        /// </summary>
        /// <param name="GetterName">Name of the getter.</param>
        /// <param name="PutterName">Name of the putter.</param>
        /// <param name="Type">The type.</param>
        /// <param name="Position">The position.</param>
        /// <param name="access">The access.</param>
        /// <param name="Location">The location.</param>
        /// <returns></returns>
		public CodeProperty AddProperty(string GetterName, string PutterName, object Type, object Position, 
                                        vsCMAccess access, object Location)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the struct.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Position">The position.</param>
        /// <param name="bases">The bases.</param>
        /// <param name="implementedInterfaces">The implemented interfaces.</param>
        /// <param name="access">The access.</param>
        /// <returns></returns>
		public CodeStruct AddStruct(string name, object Position, object bases, object implementedInterfaces,
		                            vsCMAccess access)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Adds the variable.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="Type">The type.</param>
        /// <param name="Position">The position.</param>
        /// <param name="access">The access.</param>
        /// <param name="Location">The location.</param>
        /// <returns></returns>
		public CodeVariable AddVariable(string name, object Type, object Position, vsCMAccess access, 
                                        object Location)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Gets the attributes.
        /// </summary>
        /// <value>The attributes.</value>
		public CodeElements Attributes
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the bases.
        /// </summary>
        /// <value>The bases.</value>
		public CodeElements Bases
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets the comment.
        /// </summary>
        /// <value>The comment.</value>
		public string Comment
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the derived types.
        /// </summary>
        /// <value>The derived types.</value>
		public CodeElements DerivedTypes
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets the doc comment.
        /// </summary>
        /// <value>The doc comment.</value>
		public string DocComment
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the implemented interfaces.
        /// </summary>
        /// <value>The implemented interfaces.</value>
		public CodeElements ImplementedInterfaces
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets or sets a value indicating whether this instance is abstract.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is abstract; otherwise, <c>false</c>.
        /// </value>
		public bool IsAbstract
		{
			get { throw new Exception("The method or operation is not implemented."); }
			set { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the kind.
        /// </summary>
        /// <value>The kind.</value>
		public override vsCMElement Kind
		{
			get { return vsCMElement.vsCMElementClass; }
		}

        /// <summary>
        /// Gets the members.
        /// </summary>
        /// <value>The members.</value>
		public CodeElements Members
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Gets the namespace.
        /// </summary>
        /// <value>The namespace.</value>
		public CodeNamespace Namespace
		{
			get { throw new Exception("The method or operation is not implemented."); }
		}

        /// <summary>
        /// Removes the base.
        /// </summary>
        /// <param name="element">The element.</param>
		public void RemoveBase(object element)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Removes the interface.
        /// </summary>
        /// <param name="element">The element.</param>
		public void RemoveInterface(object element)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Removes the member.
        /// </summary>
        /// <param name="element">The element.</param>
		public void RemoveMember(object element)
		{
			throw new Exception("The method or operation is not implemented.");
		}

        /// <summary>
        /// Get_s the is derived from.
        /// </summary>
        /// <param name="fullName">The full name.</param>
        /// <returns></returns>
		public bool get_IsDerivedFrom(string fullName)
		{
			throw new Exception("The method or operation is not implemented.");
		}

		#endregion
	}
}